package com.zhentao.controller;

import com.zhentao.dto.FaceLoginDTO;
import com.zhentao.dto.FaceRegisterDTO;
import com.zhentao.dto.FaceRecognitionDTO;
import com.zhentao.result.Result;
import com.zhentao.service.UserFaceInfoService;
import com.zhentao.vo.FaceLoginVO;
import com.zhentao.vo.FaceRegisterVO;
import com.zhentao.vo.FaceRecognitionVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * 用户控制器
 */
@Slf4j
@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    private UserFaceInfoService userFaceInfoService;

    /**
     * 人脸注册接口
     * 
     * @param registerDTO 注册信息
     * @return 注册结果
     */
    @PostMapping("/face/register")
    public Result faceRegister(@Validated FaceRegisterDTO registerDTO) {
        try {
            log.info("开始人脸注册");
            
            FaceRegisterVO registerVO = userFaceInfoService.faceRegister(registerDTO);
            
            return Result.success("人脸注册成功", registerVO);
            
        } catch (Exception e) {
            log.error("人脸注册失败", e);
            return Result.failed(e.getMessage());
        }
    }

    /**
     * 人脸登录接口
     * 
     * @param loginDTO 登录信息
     * @return 登录结果
     */
    @PostMapping("/face/login")
    public Result faceLogin(@Validated FaceLoginDTO loginDTO) {
        try {
            log.info("开始人脸登录");
            
            FaceLoginVO loginVO = userFaceInfoService.faceLogin(loginDTO);
            
            return Result.success("人脸登录成功", loginVO);
            
        } catch (Exception e) {
            log.error("人脸登录失败", e);
            return Result.failed(e.getMessage());
        }
    }

    /**
     * 统一人脸识别接口（自动判断登录或注册）
     * 
     * @param recognitionDTO 人脸识别信息
     * @return 识别结果
     */
    @PostMapping("/face/recognition")
    public Result faceRecognition(@Validated FaceRecognitionDTO recognitionDTO) {
        try {
            log.info("开始人脸识别");
            
            FaceRecognitionVO recognitionVO = userFaceInfoService.faceRecognition(recognitionDTO);
            
            String message = recognitionVO.getIsNewUser() ? 
                "欢迎新用户，注册成功！" : 
                "欢迎回来，登录成功！";
            
            return Result.success(message, recognitionVO);
            
        } catch (Exception e) {
            log.error("人脸识别失败", e);
            return Result.failed(e.getMessage());
        }
    }

    /**
     * 根据人脸ID查询用户信息
     * 
     * @param faceId 人脸ID
     * @return 用户信息
     */
    @GetMapping("/face/{faceId}")
    public Result getUserByFaceId(@PathVariable String faceId) {
        try {
            com.zhentao.pojo.UserFaceInfo userInfo = userFaceInfoService.findByFaceId(faceId);
            if (userInfo == null) {
                return Result.failed("用户不存在");
            }
            // 不返回人脸特征数据
            userInfo.setFaceFeature(null);
            return Result.success("查询成功", userInfo);
            
        } catch (Exception e) {
            log.error("查询用户信息失败", e);
            return Result.failed("查询失败: " + e.getMessage());
        }
    }

    /**
     * 根据姓名查询用户信息
     * 
     * @param name 姓名
     * @return 用户信息
     */
    @GetMapping("/name/{name}")
    public Result getUserByName(@PathVariable String name) {
        try {
            com.zhentao.pojo.UserFaceInfo userInfo = userFaceInfoService.findByName(name);
            if (userInfo == null) {
                return Result.failed("用户不存在");
            }
            // 不返回人脸特征数据
            userInfo.setFaceFeature(null);
            return Result.success("查询成功", userInfo);
            
        } catch (Exception e) {
            log.error("查询用户信息失败", e);
            return Result.failed("查询失败: " + e.getMessage());
        }
    }

    /**
     * 获取所有用户列表
     * 
     * @param groupId 分组ID（可选）
     * @return 用户列表
     */
    @GetMapping("/list")
    public Result getUserList(@RequestParam(required = false) Integer groupId) {
        try {
            java.util.List<com.zhentao.pojo.UserFaceInfo> users = userFaceInfoService.list();
            // 不返回人脸特征数据
            users.forEach(user -> user.setFaceFeature(null));
            
            return Result.success("查询成功", users);
            
        } catch (Exception e) {
            log.error("查询用户列表失败", e);
            return Result.failed("查询失败: " + e.getMessage());
        }
    }

    /**
     * 删除用户
     * 
     * @param id 用户ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    public Result deleteUser(@PathVariable Integer id) {
        try {
            boolean success = userFaceInfoService.deleteUser(id);
            if (success) {
                return Result.success("删除成功");
            } else {
                return Result.failed("用户不存在");
            }
            
        } catch (Exception e) {
            log.error("删除用户失败", e);
            return Result.failed("删除失败: " + e.getMessage());
        }
    }
}
